package br.com.consignum.modelo.grupo;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import br.com.consignum.annotations.FiltroConsulta;
import br.com.consignum.annotations.NotNull;
import br.com.consignum.annotations.Size;
import br.com.consignum.annotations.Trim;
import br.com.consignum.modelo.util.DominioTipoGrupo;
import br.com.consignum.modelo.util.EntidadeVO;
import br.com.consignum.modelo.util.Unico;

/**
 * The persistent class for the catb05_grupo database table.
 */
@Entity
@Table( name = "catb05_grupo", schema = "controle_acesso" )
public class GrupoVO extends EntidadeVO {

	private static final long serialVersionUID = 1L;

	@Trim
	@Column( name = "descricao" )
	@Size( max = 300 )
	private String descricao;

	@FiltroConsulta( name = "dominioTipoGrupo" )
	@NotNull
	@Enumerated( EnumType.STRING )
	@Column( name = "dominio_tipo_grupo" )
	@Unico( value = "dominio_tipo_grupo", title = "Tipo de Grupo" )
	private DominioTipoGrupo dominioTipoGrupo;

	@Id
	@SequenceGenerator( name = "CATB05_GRUPO_IDGRUPO_GENERATOR", sequenceName = "SEQC_GRUPO", schema = "controle_acesso", allocationSize = 0 )
	@GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "CATB05_GRUPO_IDGRUPO_GENERATOR" )
	@Column( name = "id_grupo" )
	private Long id;

	@NotNull
	@Column( name = "nome" )
	@FiltroConsulta( name = "nome" )
	@Unico( value = "nome", title = "Grupo" )
	private String nome;

	@Override
	public boolean equals( Object obj ) {
		if ( this == obj )
			return true;
		if ( obj == null )
			return false;
		if ( getClass() != obj.getClass() )
			return false;
		GrupoVO other = (GrupoVO) obj;
		if ( descricao == null ) {
			if ( other.descricao != null )
				return false;
		} else if ( !descricao.equals( other.descricao ) )
			return false;
		if ( dominioTipoGrupo != other.dominioTipoGrupo )
			return false;
		if ( id == null ) {
			if ( other.id != null )
				return false;
		} else if ( !id.equals( other.id ) )
			return false;
		if ( nome == null ) {
			if ( other.nome != null )
				return false;
		} else if ( !nome.equals( other.nome ) )
			return false;
		return true;
	}

	public String getDescricao() {
		return descricao;
	}

	public DominioTipoGrupo getDominioTipoGrupo() {
		return dominioTipoGrupo;
	}

	public Long getId() {
		return id;
	}

	public String getNome() {
		return nome;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ( ( descricao == null ) ? 0 : descricao.hashCode() );
		result = prime * result + ( ( dominioTipoGrupo == null ) ? 0 : dominioTipoGrupo.hashCode() );
		result = prime * result + ( ( id == null ) ? 0 : id.hashCode() );
		result = prime * result + ( ( nome == null ) ? 0 : nome.hashCode() );
		return result;
	}

	public void setDescricao( String descricao ) {
		this.descricao = descricao;
	}

	public void setDominioTipoGrupo( DominioTipoGrupo dominioTipoGrupo ) {
		this.dominioTipoGrupo = dominioTipoGrupo;
	}

	public void setId( Long id ) {
		this.id = id;
	}

	public void setNome( String nome ) {
		this.nome = nome;
	}

}